package es.seam.myebay;

import java.util.Date;
import java.util.List;

import javax.persistence.EntityManager;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.log.Log;

import es.seam.myebay.model.Account;
import es.seam.myebay.model.User;
import es.seam.myebay.util.Hash;
import es.seam.myebay.util.Navigator;

/**
 * Clase para registrar un usuario Con la anotacion '@Name' le indicamos a Seam
 * que es un componente, y estará disponible en las paginas JSF
 * 
 * @author tes
 * 
 */

@Name("register")
@Scope(ScopeType.STATELESS)
public class Register {

    @In(create = true)
    private User user;

    @In(create = true)
    @Out
    private Account account;

    @In
    private Hash hashUtil;

    @In
    private EntityManager entityManager;

    @Logger
    private Log log;

    public String registrar() {
        List usuariosRegistrados = entityManager.createQuery(
                "select username from User where username = #{user.username}")
                .getResultList();

        if (usuariosRegistrados.size() == 0) {
            String hashedPassword = hashUtil.hash(user.getPassword()); 
            account.setMemberSince(new Date());
            user.setAccount(account);
            user.setPassword(hashedPassword);
            entityManager.persist(user);
            log.info("Registrado la nueva cuenta. userId:#0, username:#1, accountId:#2", user.getId(), user.getUsername(), account.getId());
            return Navigator.SUCCESS;
        } else {
            log.info("Hubo un error en el registro. El nombre de usuario ya existe");
            return Navigator.FAILURE;
        }
    }

}
